package cn.tannn.cat.file.server.dao;

import cn.tannn.cat.file.server.controller.manage.dto.DictSortEdit;
import cn.tannn.cat.file.server.entity.Dict;
import cn.tannn.cat.file.server.enums.DictStatus;
import cn.tannn.cat.file.server.enums.DictType;
import cn.tannn.jdevelops.jpa.repository.JpaBasicsRepository;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Optional;

/**
 * 字典查询
 *
 * @author <a href="https://tannn.cn/">tan</a>
 * @date 2024/3/7 14:08
 */
public interface DictDao extends JpaBasicsRepository<Dict, Long> {

    /**
     * 设置状态
     *
     * @param ids id集合
     * @param dictStatus Status
     */
    @Transactional(rollbackFor = Exception.class)
    @Modifying
    @Query("update Dict u set u.status = :status where  u.id in (:ids) ")
    void updateState(@Param("ids") List<Long> ids, @Param("status") DictStatus dictStatus);


    /**
     * 设置顺序
     *
     * @param sort DictSortEdit
     */
    @Transactional(rollbackFor = Exception.class)
    @Modifying
    @Query("update Dict u set u.sort = :#{#sort.sort} where  u.id in (:#{#sort.id}) ")
    void updateSort(@Param("sort") DictSortEdit sort);


    /**
     * 查询字典
     * @param value 值
     * @param dictType 类型
     * @return Dict
     */
    Optional<Dict> findByValueAndDictType(String value, DictType dictType);

    /**
     * 根据类型查询
     * @param dictType DictType
     * @param dictStatus  Status
     * @param sort 排序
     * @return Dict
     */
    List<Dict> findByDictTypeAndStatus(DictType dictType, DictStatus dictStatus, Sort sort);
}
